home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 276-300 / 283 / bref / hsi.color < prev    next >
Text File  |  1995-03-14  |  2KB  |  140 lines

  1. 'Program HSI.Color
  2. 'HSI to RGB Conversion by Stephen Pietrowicz
  3. '"Amazing Computing" Vol 1 #5 June 1986
  4.  
  5. ' H = hue   S = saturation   I = intensity
  6.  
  7. SCREEN 1,640,200,4,2
  8. WINDOW 2,"HSI to RGB",,0,1
  9. DEF FNa(n) = 2*I*((S*n)+.5)
  10. DEF FNb(n) = .5+(S*n)+2*(I-.5)*(.5-(S*n))
  11.  
  12. GOSUB Init
  13.  
  14. MouseInput:
  15. GOSUB PrintVals
  16.  
  17. WHILE MOUSE(0) = 0: WEND
  18. x = MOUSE(3): y = MOUSE(4)
  19.  
  20. IF (y<100) OR (y>180) THEN MouseInput
  21. IF (x<50) OR (x>550) THEN MouseInput
  22. 'Hue selected
  23. IF y<= 130 THEN
  24.  IF (x>=120) AND (x<=480) THEN
  25.   Hue = x-120
  26.   H = Hue/360
  27.   COLOR 0
  28.   LINE (hx,102)-(hx,128)
  29.   COLOR 1
  30.   LINE (x,102)-(x,128)
  31.   hx = x
  32.  END IF
  33. 'Saturation Selected
  34. ELSEIF y >= 150 THEN
  35.  IF x <= 150 THEN
  36.   S = (x-50)/100
  37.   COLOR 0
  38.   LINE (sx,152)-(sx,178)
  39.   COLOR 1
  40.   LINE (x,152)-(x,178)
  41.   sx = x
  42. 'Intensity Selected
  43.  ELSEIF x >= 450 THEN
  44.   I = (x-450)/100
  45.   COLOR 0
  46.   LINE (ix,152)-(ix,178)
  47.   COLOR 1
  48.   LINE (x,152)-(x,178)
  49.   ix = x
  50.  END IF
  51. END IF
  52. GOSUB Convert
  53. GOTO MouseInput
  54.  
  55. Init:
  56. CLS
  57. COLOR 3
  58. LINE (118,100)-(482,130),,b
  59. LINE (48,150)-(152,180),,b
  60. LINE (448,150)-(552,180),,b
  61. hx = 120: sx = 50: ix = 450
  62. COLOR 1
  63. LINE (hx,102)-(hx,128)
  64. LINE (sx,152)-(sx,178)
  65. LINE (ix,152)-(ix,178)
  66. COLOR 2
  67. LINE (50,25)-(550,75),,bf
  68. COLOR 1
  69. LINE (50,25)-(550,75),,b
  70. r = 0: g = 0: b = 0: S = 0: I = 0
  71. RETURN
  72.  
  73. 'Change given HSI coords to RGB
  74. Convert:
  75. IF H < .16 THEN
  76.  Red = 1
  77.  Green = H*6
  78.  Blue = 0
  79. ELSEIF H < .33 THEN
  80.  Red = 2-H*6
  81.  Green = 1
  82.  Blue = 0
  83. ELSEIF H < .5 THEN
  84.  Red = 0
  85.  Green = 1
  86.  Blue = 6*H-2
  87. ELSEIF H < .66 THEN
  88.  Red = 0
  89.  Green = 4-H*6
  90.  Blue = 1
  91. ELSEIF H < .83 THEN
  92.  Red = H*6-4
  93.  Green = 0
  94.  Blue = 1
  95. ELSE
  96.  Red = 1
  97.  Green = 0
  98.  Blue = 6-6*H
  99. END IF
  100.  
  101. Red = Red-.5
  102. Green = Green -.5
  103. Blue = Blue-.5
  104.  
  105. IF I <= .5 THEN
  106.  Red = FNa(Red)
  107.  Green = FNa(Green)
  108.  Blue = FNa(Blue)
  109. ELSE
  110.  Red = FNb(Red)
  111.  Green = FNb(Green)
  112.  Blue = FNb(Blue)
  113. END IF
  114.  
  115. IF Red > 1 THEN Red = 1
  116. IF Green > 1 THEN Green = 1
  117. IF Blue > 1 THEN Blue = 1
  118. IF Red < 0 THEN Red = 0
  119. IF Green < 0 THEN Green = 0
  120. IF Blue < 0 THEN Blue = 0
  121. PALETTE 2,Red,Green,Blue
  122. RETURN
  123.  
  124. PrintVals:
  125. COLOR 3
  126. LOCATE 2,22
  127. PRINT USING "Red =#.##";Red;
  128. PRINT USING "Green =#.##";Green;
  129. PRINT USING "Blue =#.##";Blue
  130. LOCATE 12,34
  131. PRINT USING "Hue =###";Hue
  132. LOCATE 18,5
  133. PRINT USING "Saturation =#.##";S
  134. LOCATE 18,55
  135. PRINT USING "Intensity =#.##";I
  136. COLOR 2
  137. RETURN
  138.              
  139.  
  140.